<?php
// error_reporting( E_ALL ^ E_NOTICE ^ E_WARNING );
// 绘制透明图片
// 描述该文件返回一张图片
header( 'Content-Type:image/png' );
// 120, 120/4 = 20   设置生成的图片宽度
$width = 120;
// 40, 设置生成的图片高
$height = 40;

// 创建一个图
$image = imagecreatetruecolor( $width, $height );
// 创建透明背景色，主要127参数，其他可以0-255，因为任何颜色的透明都是透明
$transparent = imagecolorallocatealpha( $image, 255, 255, 255, 127 );
// 指定颜色为透明（做了移除测试，发现没问题）
imagecolortransparent( $image, $transparent );
// 保留透明颜色
imagesavealpha( $image, true );
// 填充图片颜色
imagefill( $image, 0, 0, $transparent );

// 干扰线
for ( $i = 0; $i < 10; $i++ ) {
    $lineColor = imagecolorallocate( $image, rand( 0, 200 ), rand( 0, 200 ), rand( 0, 200 ) );
    imageline( $image, rand( 0, $width ), rand( 0, $height ), rand( 0, $width ), rand( 0, $height ), $lineColor );
}
// 干扰点
for ( $i = 0; $i < 200; $i++ ) {
    $poitColor = imagecolorallocate( $image, rand( 0, 200 ), rand( 0, 200 ), rand( 0, 200 ) );
    imagesetpixel( $image, rand( 0, $width-4 ), rand( 0, $height-4 ), $poitColor );
}

// 存放最终生成的验证码
$code = '';
// 随机验证码文字的后选区
$words = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$font = './cordia.ttf';
for ( $i = 0; $i<4; $i++ ) {
    // 根据三原色创建颜色，提供给GD使用   颜色取值 0~255
    $strColor = imagecolorallocate( $image, rand( 10, 100 ), rand( 10, 100 ), rand( 10, 100 ) );
    $temp = $words[rand( 0, strlen( $words )-1 )];
    $code .=  $temp;
    // 自带的函数
    // imagestring( $image, 5, rand( $i*20+10, ( $i+1 )*30-20 ), rand( 0, $height-15 ), $temp, $strColor );
    // freetype扩展中函数 mac系统自带的php没有( 要安装新的php )
    imagettftext ( $image, 40, rand( -45, 45 ), rand( $i*25+10, $i*25+20 ), 30, $strColor, $font, $temp );
}

$_SESSION['code'] = $code;

// 向浏览器输出图片
imagepng( $image );
// 生成的图片销毁
imagedestroy( $image );
?>